/**
 * AI模块入口文件
 * 整合所有AI相关功能
 */

export * from './midscene';
export * from './langchain-parser';

import { generateActionsFromPrompt } from './langchain-parser';
import { Midscene } from './midscene';
import { TestAction } from '../types';
import { createContextLogger } from '../utils/logger';

const logger = createContextLogger('AI');

/**
 * AI解析器类
 * 提供统一的接口来处理自然语言指令
 */
export class AIParser {
  private static instance: AIParser;
  private midscene: Midscene;

  private constructor() {
    this.midscene = Midscene.getInstance();
  }

  /**
   * 获取单例实例
   */
  public static getInstance(): AIParser {
    if (!AIParser.instance) {
      AIParser.instance = new AIParser();
    }
    return AIParser.instance;
  }

  /**
   * 解析自然语言指令
   * 优先使用LangChain解析器，如果失败则回退到Midscene模拟解析
   * 
   * @param prompt 自然语言指令
   * @param baseUrl 基础URL
   * @returns 测试动作数组的Promise
   */
  public async parsePrompt(prompt: string, baseUrl?: string): Promise<TestAction[]> {
    logger.info(`解析指令: ${prompt}`);
    
    try {
      // 尝试使用LangChain解析器
      return await generateActionsFromPrompt(prompt, baseUrl);
    } catch (error: any) { // 添加类型注解
      logger.warn(`LangChain解析失败，回退到Midscene: ${error?.message || '未知错误'}`);
      
      // 回退到Midscene模拟解析
      return await this.midscene.generateActionsFromPrompt(prompt);
    }
  }
}

/**
 * 解析自然语言指令的快捷函数
 * @param prompt 自然语言指令
 * @param baseUrl 基础URL
 * @returns 测试动作数组的Promise
 */
export async function parsePrompt(prompt: string, baseUrl?: string): Promise<TestAction[]> {
  return await AIParser.getInstance().parsePrompt(prompt, baseUrl);
}